"""
@author: Charles Tim Garrocho
@contact: ctgarrocho@gmail.com
@copyright: (C) 2012-2012 Python Software Open Source
"""

from gi.repository import Gtk
from recursos import Conexoes
from IGrafica import JanelaPreferencias
from socket import socket, AF_INET, SOCK_STREAM
from shutil import copy2
from recursos import Config

def verificaStatus():
    
    soquete = socket(AF_INET, SOCK_STREAM)
    soquete.settimeout(1.5)
    resposta = soquete.connect_ex((Config.HOST, Config.PORTA))
    soquete.close()
    
    if resposta == 0:
        cliente = Conexoes.Cliente()
        cliente.enviarMensagem(Config.STATUS)
        if cliente.receberMensagem(1) == Config.OK_200:
            resposta = cliente.receberMensagem(1)
            cliente.fecharConexao()
        else:
            resposta = Config.OK_200
            cliente.fecharConexao()
        
    return resposta

def statusMonitoramento(evento, janela):
    
    status = verificaStatus()
    if status == Config.PAUSADO:
        iniciarMonitoramento(janela)
    elif status == Config.EXECUTANDO:
        pausarMonitoramento(janela)
    else:
        janela.dialogoAtencao('Erro ao Estabelecer Conexao.', 'O Servidor Esta Desligado.')

def iniciarMonitoramento(janela):
    cliente = Conexoes.Cliente()
    cliente.enviarMensagem(Config.INICIAR)
    
    if cliente.receberMensagem(1) == Config.OK_200:
        janela.status_bar.push(janela.context_id, ' Monitoramento Iniciado')
        cliente.fecharConexao()
        janela.botaoIniciar.set_stock_id(Gtk.STOCK_MEDIA_PAUSE)
        janela.botaoIniciar.set_label('Pausar')
    else:
        janela.dialogoAtencao('Erro ao Iniciar o Monitoramento.', 'Parece que o Servidor Nao Respondeu. Tente Novamente.')
        
def pausarMonitoramento(janela):
    cliente = Conexoes.Cliente()
    cliente.enviarMensagem(Config.PAUSAR)
    if cliente.receberMensagem(1) == Config.OK_200:
    
        janela.status_bar.push(janela.context_id, ' Monitoramento Pausado')
        cliente.fecharConexao()
        janela.botaoIniciar.set_stock_id(Gtk.STOCK_MEDIA_PLAY)
        janela.botaoIniciar.set_label('Iniciar  ')
    else:
        janela.dialogoAtencao('Erro ao Pausar o Monitoramento.', 'Parece que o Servidor Nao Respondeu. Tente Novamente.')

def limparImagemMonitoramento(evento, janela):
    janela.webCam.set_from_file('default.jpg')
    janela.botaoSalvarImagem.set_sensitive(False)
    janela.botaoLimparImagem.set_sensitive(False)
    
def obterImagemMonitoramento(evento, janela):
    cliente = Conexoes.Cliente()
    cliente.enviarMensagem(Config.IMAGEM)
    while cliente.receberMensagem(1) != Config.OK_200:
        cliente.enviarMensagem(Config.IMAGEM)
        
    arquivo = open('imagem.jpg', 'w')
    while True:
        dados = cliente.receberMensagem(512)
        if not dados:
            break
        arquivo.write(dados)
            
    arquivo.close
    janela.webCam.set_from_file('imagem.jpg')
    janela.botaoSalvarImagem.set_sensitive(True)
    janela.botaoLimparImagem.set_sensitive(True)
    cliente.fecharConexao()
        
def salvarImagemMonitoramento(evento, janela):
    diretorio = janela.janelaEscolhePasta()
    if diretorio != None:
        copy2('imagem.jpg', '{0}/{1}'.format(diretorio, janela.obterHoraAtual()))
    
def configurarMonitoramento(evento, janela):
    win = JanelaPreferencias()

def sairMonitoramento(evento = None):
    Gtk.main_quit()